#ifndef CommWifi_H
#define CommWifi_H

#define WIFI_RXD_LENGTH 50
#define WIFI_TXD_LENGTH 50

#define WIFI_HEADER0_ADDR 0
#define WIFI_HEADER1_ADDR 1
#define WIFI_VERSION_ADDR 2
#define WIFI_COMMAND_ADDR 3
#define WIFI_LENGTH0_ADDR 4
#define WIFI_LENGTH1_ADDR 5
#define WIFI_DATA_ADDR 6
#define WIFI_DPID_ADDR 6
#define WIFI_TYPE_ADDR 7
#define WIFI_ORDER_ADDR 10

#define DPID_POWER 0x01
#define DPID_TARTEMP_C 0x02
#define DPID_TARTEMP_F 0x18
#define DPID_TEMPUNIT 0x13
#define DPID_MODE 0x04
#define DPID_FANLEVEL 0x05
#define DPID_VERSWING 0x1F
#define DPID_HORSWING 0x22
#define DPID_ECO 0x08
#define DPID_DRYER 0x09
#define DPID_HEATER 0x0C
#define DPID_LIGHT 0x0D
#define DPID_TIMER 0x14
#define DPID_TIMER_LEFT 0x15
#define DPID_SLEEP 0x19
#define DPID_HEALTH 0x1A
#define DPID_CHILDLOCK 0x0E
#define DPID_BUZZER 0x10
#define DPID_HUMIDIFIER 0x0B
#define DPID_TARHUM 0x11

#define DPID_FAULT 0x16

#define DPID_COMP_FREQ 0x65
#define DPID_OFAN_SPEED 0x66
#define DPID_EVE_STEP 0x67
#define DPID_AC_VOLTAGE 0x68
#define DPID_DC_VOLTAGE 0x69
#define DPID_AC_CURRENT 0x6A
#define DPID_DC_CURRENT 0x6B

#define DPID_OUT_TEMP 0x6C
#define DPID_OUT_TUBE_TEMP 0x6D
#define DPID_OUT_EXHA_TEMP 0x6E
#define DPID_OUT_IPM_TEMP 0x6F

#define DPID_IN_TEMP_C 0x96
#define DPID_IN_TUBE_TEMP 0x97
#define DPID_IN_HUMI 0x98
#define DPID_IFAN_RUN_RPM 0x99
#define DPID_IFAN_SET_RPM 0x9A
#define DPID_IN_TEMP_F 0x9B

#define DPID_LOW_HEAT 0xB4
#define DPID_MANUAL_DEFROST 0xB5

#define DPID_SET_CAP_TEST 0xAA
#define DPID_SET_EXP_STEP 0xAB
#define DPID_SET_EXH_TEMP 0xAC
#define DPID_SET_COMP_FREQ 0xAD
#define DPID_SET_OUT_FAN 0xAE
#define DPID_SET_IN_FAN 0xAF
#define DPID_SET_SW_STEP 0xB0
#define DPID_SET_CORRECT 0xB1

#define DPID_APP_SET_TEST 0xC6
#define DPID_APP_SHOW_DATA 0xC7

#define WIFI_HEADER0_BYTE 0x55
#define WIFI_HEADER1_BYTE 0xAA
#define WIFI_VERSION_BYTE 0x03

#ifdef CommWifi_Variable
#define CommWifi_Extern

const char DEVICE_ID[] = "{\"p\":\"0cgqrc0amsilywvu\",";
const char DEVICE_VERSION[] = "\"v\":\"1.0.7\",";
const char DEVICE_NET[] = "\"m\":0}";

static struct
{
    U8 *tx_address;
    U8 tx_count;

    U8 *rx_address;
    U8 rx_count;
    U8 rx_length;
} Comm_wifi;

#else
#define CommWifi_Extern extern
#endif

typedef struct
{
    U8 net;
} stat_wifi_typeDef;

typedef struct
{
    U8 rxd;
    U8 upd_5s;
    U8 upd_3s;
    U8 upd_2s;
    U8 ota_delay;
} timer_wifi_typeDef;

typedef struct
{
    U8 rxd[WIFI_RXD_LENGTH];
    U8 txd[WIFI_TXD_LENGTH];
} buff_wifi_typeDef;


extern stat_wifi_typeDef stat_wifi;
extern timer_wifi_typeDef timer_wifi;
extern buff_wifi_typeDef buff_wifi;


//

CommWifi_Extern U16 Electricity_Price;
CommWifi_Extern U16 Electricity_temp;


CommWifi_Extern ram_byte wifi_flag;
#define f_wifi_rxd_end wifi_flag.bit.b0 /* 接收一包数据完成 */
#define f_wifi_txd_ing wifi_flag.bit.b1 /* 发送数据中 */
#define f_wifi_test_ok wifi_flag.bit.b2 /* 产测合格 */
#define f_wifi_heart wifi_flag.bit.b3   /* 接收过心跳包 */
#define f_wifi_defrost wifi_flag.bit.b4 /* 化霜状态 */

CommWifi_Extern ram_byte wifi_flag1;
#define f_wifi_rst wifi_flag1.bit.b0               /* wifi重置标志 */
#define f_wifi_test wifi_flag1.bit.b1              /* wifi自检标志 */
#define f_wifi_reply_heart wifi_flag1.bit.b2       /* wifi获取心跳包标志 */
#define f_wifi_reply_device_info wifi_flag1.bit.b3 /* wifi获取设备信息标志 */
#define f_wifi_reply_model_mode wifi_flag1.bit.b4  /* wifi获取模块工作方式 */
#define f_wifi_reply_model_stat wifi_flag1.bit.b5  /* wifi下行模块工作状态 */

CommWifi_Extern ram_byte device_data_upd1;
#define device_data_upd_all1 device_data_upd1.byte
#define f_upd_power device_data_upd1.bit.b0     /* 开关改变上报标志 */
#define f_upd_tarTemp_C device_data_upd1.bit.b1 /* 目标温度改变上报标志，包含摄氏度、华氏度、温标改变 */
#define f_upd_tarTemp_F device_data_upd1.bit.b2 /* 目标温度改变上报标志，包含摄氏度、华氏度、温标改变 */
#define f_upd_tarTemp_U device_data_upd1.bit.b3 /* 目标温度改变上报标志，包含摄氏度、华氏度、温标改变 */
#define f_upd_mode device_data_upd1.bit.b4      /* 模式改变上报标志 */
#define f_upd_fanStep device_data_upd1.bit.b5   /* 风速改变上报标志 */
#define f_upd_verSw device_data_upd1.bit.b6     /* 垂直扫风改变上报标志 */
#define f_upd_horSw device_data_upd1.bit.b7     /* 水平扫风改变上报标志 */

CommWifi_Extern ram_byte device_data_upd2;
#define device_data_upd_all2 device_data_upd2.byte
#define f_upd_eco device_data_upd2.bit.b0       /* 节能改变上报标志 */
#define f_upd_dryer device_data_upd2.bit.b1     /* 干燥改变上报标志 */
#define f_upd_heater device_data_upd2.bit.b2    /* 辅热改变上报标志 */
#define f_upd_light device_data_upd2.bit.b3     /* 灯光改变上报标志 */
#define f_upd_sleep device_data_upd2.bit.b4     /* 睡眠改变上报标志 */
#define f_upd_health device_data_upd2.bit.b5    /* 健康改变上报标志 */
#define f_upd_buzzer device_data_upd2.bit.b6    /* 蜂鸣器改变上报标志 */
#define f_upd_childlock device_data_upd2.bit.b7 /* 童锁改变上报标志 */

CommWifi_Extern ram_byte device_data_upd3;
#define device_data_upd_all3 device_data_upd3.byte
#define f_upd_humidifier device_data_upd3.bit.b0     /* 加湿器改变上报标志 */
#define f_upd_tarhum device_data_upd3.bit.b1         /* 设定湿度改变上报标志 */
#define f_upd_set_cap_test device_data_upd3.bit.b2   /* 能力测试设定改变上报标志 */
#define f_upd_set_exp_step device_data_upd3.bit.b3   /* 电子膨胀阀开度设定改变上报标志 */
#define f_upd_set_exh_temp device_data_upd3.bit.b4   /* 排气温度设定改变上报标志 */
#define f_upd_set_comp_freq device_data_upd3.bit.b5  /* 压缩机频率设定改变上报标志 */
#define f_upd_low_heat device_data_upd3.bit.b6       /* 低温制热改变上报标志 */
#define f_upd_manual_defrost device_data_upd3.bit.b7 /* 手动化霜改变上报标志 */
// #define f_upd_timer device_data_upd3.bit.b2         /* 定时改变上报标志 */
// #define f_upd_timer_left device_data_upd3.bit.b3    /* 定时剩余时间改变上报标志 */

CommWifi_Extern ram_byte device_data_upd4;
#define device_data_upd_all4 device_data_upd4.byte
#define f_upd_set_out_fan device_data_upd4.bit.b0   /* 外风机转速设定改变上报标志 */
#define f_upd_set_in_fan device_data_upd4.bit.b1    /* 内风机转速设定改变上报标志 */
#define f_upd_set_sw_step device_data_upd4.bit.b2   /* 扫风角度设定改变上报标志 */
#define f_upd_set_correct device_data_upd4.bit.b3   /* 补偿温度设定改变上报标志 */
#define f_upd_app_set_test device_data_upd4.bit.b4  /* app设置测试设定改变上报标志 */
#define f_upd_app_show_data device_data_upd4.bit.b5 /* app展示数据设定改变上报标志 */
#define f_upd_error_code device_data_upd4.bit.b6    /* wifi上报故障状态 */

CommWifi_Extern ram_byte device_data_upd_5s;
#define device_data_upd_all_5s device_data_upd_5s.byte
#define f_upd_comp_freq device_data_upd_5s.bit.b0  /* 压缩机频率定时上报标志 */
#define f_upd_ofan_speed device_data_upd_5s.bit.b1 /* 外风机转速定时上报标志 */
#define f_upd_eve_step device_data_upd_5s.bit.b2   /* 电子膨胀阀开度定时上报标志 */
#define f_upd_ac_voltage device_data_upd_5s.bit.b3 /* 外机交流电压定时上报标志 */
#define f_upd_dc_voltage device_data_upd_5s.bit.b4 /* 直流母线电压定时上报标志 */
#define f_upd_ac_current device_data_upd_5s.bit.b5 /* 外机交流电流定时上报标志 */
#define f_upd_dc_current device_data_upd_5s.bit.b6 /* 压缩机相电流定时上报标志 */

CommWifi_Extern ram_byte device_data_upd_3s;
#define device_data_upd_all_3s device_data_upd_3s.byte
#define f_upd_ifan_run_rpm device_data_upd_3s.bit.b0 /* 内风机实际转速定时上报标志 */
#define f_upd_ifan_set_rpm device_data_upd_3s.bit.b1 /* 内风机设定转速定时上报标志 */

CommWifi_Extern ram_byte device_data_upd_2s;
#define device_data_upd_all_2s device_data_upd_2s.byte
#define f_upd_out_temp device_data_upd_2s.bit.b0      /* 外环温度定时上报标志 */
#define f_upd_out_tube_temp device_data_upd_2s.bit.b1 /* 外管温度定时上报标志 */
#define f_upd_out_exha_temp device_data_upd_2s.bit.b2 /* 排气温度定时上报标志 */
#define f_upd_out_ipm_temp device_data_upd_2s.bit.b3  /* 压缩机ipm温度定时上报标志 */
#define f_upd_in_temp_c device_data_upd_2s.bit.b4     /* 内环摄氏度定时上报标志 */
#define f_upd_in_tube_temp device_data_upd_2s.bit.b5  /* 内管温度定时上报标志 */
#define f_upd_in_humi device_data_upd_2s.bit.b6       /* 内环湿度定时上报标志 */
#define f_upd_in_temp_f device_data_upd_2s.bit.b7     /* 内环华氏度定时上报标志 */

CommWifi_Extern ram_byte fault_flag[4];
#define f_fault1 fault_flag[0].bit.b0 /* 跳线帽故障C0 */
#define f_fault2 fault_flag[0].bit.b1 /* 内机过零检测故障C1 */
#define f_fault3 fault_flag[0].bit.b2 /* 室内风机故障C2 */
#define f_fault4 fault_flag[0].bit.b3 /* 内机报内外机通讯故障C3 */
#define f_fault5 fault_flag[0].bit.b4 /* 室内环境感温包开短路E0 */
#define f_fault6 fault_flag[0].bit.b5 /* 室内管温感温包开短路E1 */
#define f_fault7 fault_flag[0].bit.b6 /* 室外环境感温包开短路E2 */
#define f_fault8 fault_flag[0].bit.b7 /* 室外管温感温包开短路E3 */

#define f_fault9 fault_flag[1].bit.b0  /* 外环温度定时上报标志 */
#define f_fault10 fault_flag[1].bit.b1 /* 外管温度定时上报标志 */
#define f_fault11 fault_flag[1].bit.b2 /* 排气温度定时上报标志 */
#define f_fault12 fault_flag[1].bit.b3 /* 压缩机ipm温度定时上报标志 */
#define f_fault13 fault_flag[1].bit.b4 /* 内环摄氏度定时上报标志 */
#define f_fault14 fault_flag[1].bit.b5 /* 内管温度定时上报标志 */
#define f_fault15 fault_flag[1].bit.b6 /* 内环湿度定时上报标志 */
#define f_fault16 fault_flag[1].bit.b7 /* 内环华氏度定时上报标志 */

#define f_fault17 fault_flag[2].bit.b0 /* 外环温度定时上报标志 */
#define f_fault18 fault_flag[2].bit.b1 /* 外管温度定时上报标志 */
#define f_fault19 fault_flag[2].bit.b2 /* 排气温度定时上报标志 */
#define f_fault20 fault_flag[2].bit.b3 /* 压缩机ipm温度定时上报标志 */
#define f_fault21 fault_flag[2].bit.b4 /* 内环摄氏度定时上报标志 */
#define f_fault22 fault_flag[2].bit.b5 /* 内管温度定时上报标志 */
#define f_fault23 fault_flag[2].bit.b6 /* 内环湿度定时上报标志 */
#define f_fault24 fault_flag[2].bit.b7 /* 内环华氏度定时上报标志 */

#define f_fault25 fault_flag[3].bit.b0 /* 外环温度定时上报标志 */
#define f_fault26 fault_flag[3].bit.b1 /* 外管温度定时上报标志 */
#define f_fault27 fault_flag[3].bit.b2 /* 排气温度定时上报标志 */
#define f_fault28 fault_flag[3].bit.b3 /* 压缩机ipm温度定时上报标志 */
#define f_fault29 fault_flag[3].bit.b4 /* 内环摄氏度定时上报标志 */
#define f_fault30 fault_flag[3].bit.b5 /* 内管温度定时上报标志 */

void Comm_wifi_Tx(U8 *tx_buf, U8 tx_num); /* Wi-Fi通讯发送 */
void Comm_wifi_Tx_Intp(void);             /* Wi-Fi通讯发送中断 */
void Comm_wifi_Rx(U8 *rx_buf, U8 rx_num); /* Wi-Fi通讯接收 */
void Comm_wifi_Rx_Intp(U8 data);          /* Wi-Fi通讯接收中断 */

U8 get_check_sum(U8 *, U8);

void CommWifiAct(void);

void Comm_wifi_to_test(void);  /* wifi模块进入产测 */
void Comm_wifi_to_reset(void); /* wifi模块进入重置 */

void Comm_wifi_data_down(void); /* 接收数据处理 */

void Comm_wifi_reply_heart(void);       /* 应答心跳检测 */
void Comm_wifi_reply_device_info(void); /* 应答设备信息 */
void Comm_wifi_reply_model_mode(void);  /* 应答模块工作方式 */
void Comm_wifi_reply_model_stat(void);  /* 应答模块工作状态 */
void Comm_wifi_down_ctrl(void);         /* 下发控制指令 */

void Comm_wifi_data_up(void); /* 上行数据处理 */
U8 Comm_wifi_error_check(void);

void Comm_wifi_data_up_bool(U8, U8);
void Comm_wifi_data_up_enum(U8, U8);
void Comm_wifi_data_up_value(U8, S32);
void Comm_wifi_data_up_fault(U8);
void commwifiTime(void);

#endif
